#include <stdio.h>

// Code d'erreurs:
// 0: RAS
// 1: Données entrées incorrectes
// 2: Résultat du calcule incorecte

int main()
{
  int year, month, day, dayRank, cmonth; // cmonth contiendra la valeur du mois pour le calcule (à cause des exceptions que sont janvier et février)
  char days[7][10] = {"samedi", "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi"};

  printf
    (
      "################################\n"
      "##Calcul du jour de la semaine##\n"
      "################################\n\n"
    );
  printf("Entrez une année (ex. «1904»), puis un mois (ex. «3» pour mars), et enfin un jour (ex. 17) : ");
  if( !scanf("%d\n%d\n%d", &year, &month, &day) )
  {
    fprintf(stderr, "\nDonnées entrées incorrectes !\n");
    return 1;
  }

  // Dans la formule de Maurice Kraitchik, janvier = 13 et février = 14
  if(month < 3) cmonth = month + 12;
  else cmonth = month;

  // Merci Maurice Kraitchik !
  dayRank = (day + 2*cmonth + 3*(cmonth + 1)/5 + year + year/4 - year/100 + year/400 + 2) % 7;

  if(dayRank < 0 || dayRank > 6)
  {
    fprintf(stderr, "\n@! Pour une raison imprévue, le jour de la semaine n'as pu être déterminé !\n\tValeur de dayRank :\t%d\n\tPlage de valeurs supportées :\t0 à 6\n\tDate entrée :\t%d-%02d-%02d\n", dayRank, year, month, day);
    return 2;
  }
  else
    printf("\nLe %d-%02d-%02d est donc un %s\n", year, month, day, days[dayRank]);

  return 0;
}
